package com.yqd.oop;

public class Score<T> {
    String name;
    String id;
//    Object value;  //因为Object是所有类型的父类，因此既可以存放Integer也能存放String
    T value; //T会根据使用时提供的类型自动变成对应类型

    public Score(String name, String id, T value) {
        this.name = name;
        this.id = id;
        this.value = value;
    }


    public static void main(String[] args) {
        Score score = new Score("数据结构与算法基础", "EP074512", "优秀");  //是String类型的
        String str = (String) score.value;  //获取成绩需要进行强制类型转换，虽然并不是一开始的类型，但是编译不会报错
        System.out.println(str);

        Score score1 = new Score("Java基础", "EP074513", 80);  //是String类型的
        Number number = (Number) score1.value;  //获取成绩需要进行强制类型转换，虽然并不是一开始的类型，但是编译不会报错
        System.out.println(number);

        Score<String> score3 = new Score<>("计算机网络", "EP074512", "优秀");
        //因为现在有了类型变量，在使用时同样需要跟上<>并在其中填写明确要使用的类型
        //这样我们就可以根据不同的类型进行选择了
        String value = score3.value;   //一旦类型明确，那么泛型就变成对应的类型了
        System.out.println(value);
    }
}
